const { FileSystemWallet, Gateway } = require('fabric-network');
const fs = require('fs');
const path = require('path');

async function connectToNetwork() {
  try {
    // 设置连接配置文件路径
    const ccpPath = path.resolve(__dirname, 'connection.json');

    // 读取连接配置文件
    const ccpJSON = fs.readFileSync(ccpPath, 'utf8');
    const ccp = JSON.parse(ccpJSON);

    // 创建文件系统钱包
    const walletPath = path.join(process.cwd(), 'wallet');
    const wallet = new FileSystemWallet(walletPath);

    // 指定用户身份名称
    const userName = 'user1';

    // 检查钱包中是否存在用户身份
    const userExists = await wallet.exists(userName);
    if (!userExists) {
      console.log(`用户身份"${userName}"不存在，请注册并导入用户身份至钱包`);
      return;
    }

    // 创建一个新的Gateway对象
    const gateway = new Gateway();

    // 使用Gateway连接到Fabric网络
    await gateway.connect(ccp, {
      wallet,
      identity: userName,
      discovery: { enabled: true, asLocalhost: true },
    });

    // 获取通道和合约
    const network = await gateway.getNetwork('mychannel');
    const contract = network.getContract('mycontract');

    // 在这里可以执行与合约交互的操作
    // 例如：contract.submitTransaction('invoke', 'arg1', 'arg2');

    // 断开与Fabric网络的连接
    gateway.disconnect();
  } catch (error) {
    console.error(`连接到Fabric网络时发生错误: ${error}`);
    process.exit(1);
  }
}

// 调用连接函数
connectToNetwork();
